// 引入 axios
import axios from "axios";

// 引入路由实例
import router from '@/router';

// 引入 element-ui 中的 Message
import { Message } from 'element-ui';

let URL = '';
// 在开发环境下
if (process.env.NODE_ENV === 'development') {
    URL = 'http://api.erp.byesame.com/jeecg-boot/base';
}
// 生产环境下
else if (process.env.NODE_ENV === 'production') {
    URL = 'http://192.168.0.110/';
}
// 其他环境
else {
    URL = '其他环境 看需求';
}

// 创建 axios 实例
const serve = axios.create({
    // 设置接口前缀
    baseURL: URL,
    // 设置超时时间
    timeout: 5000,
    // 设置请求头
    headers: {
        "Content-Type": 'application/json'
    }
});

// 定义一个变量 存路径
let path = '';

// 请求拦截器 发送请求的路上准备干点啥
serve.interceptors.request.use((config) => {
    // 除了登录和注册  其余的接口都需要配置请求头 token
    if (config.url !== '/login' && config.url !== '/register') {
        // 从 localStorage 中获取 X-Access-Token
        const token = localStorage.getItem('token');
        if (token) {
            config.headers['X-Access-Token'] = token;
        }
    }
    // 每次请求的时候先将 url 赋值给变量 path
    path = config.url;
    return config;
});

// 响应拦截器  数据请求成功了 你要干点啥??
serve.interceptors.response.use((res) => {
    // 判断请求成功的状态码 如果是 200 将 data 返回出去
    if (res.data.code === 200) {
        return res.data;
    }
    // 如果是 401 证明权限验证失败  此时我想判断一下  如果是登录或者注册就让他去,如果不是登录或者注册就让他登录去
    else if (res.data.code === 401) {
        // 假设权限认证失败 将后端给的提示 msg 弹出去
        Message({
            message: res.data.msg,
            type: 'error'
        });
        if (path === '/login' || path === '/register') {
            return;
        } else {
            // 去登录
            router.push('/');
        }
    } else {
        return res.data;
    }
});
export default {serve}

export function http(url, method = 'post', data) {
    if (method == 'get') {
        return new Promise((resolve, reject) => {
            serve({
                url: url,
                method: method,
                params: data
            }).then((res) => {
                if (res.code == 200) {
                    resolve(res)
                }
            }).catch((err) => {
                reject(err)
            })
        })
    }
    //  post   put   delete
    else {
        return new Promise((resolve, reject) => {
            serve({
                url: url,
                method: method,
                data: data
            }).then((res) => {
                if (res.code == 200) {
                    resolve(res)
                }
            }).catch((err) => {
                reject(err)
            })
        })
    }
}
// // 封装 delete
export function deleteData(url, method, data) {
    return new Promise((resolve) => {
        serve({
            method,
            url,
            params: data
        })
        .then((res) => {
            resolve(res);
        })
        .catch(() => {
            Message({
                message: '系统错误',
                type: 'error'
            });
        });
    });
}
// // 封装 put
// export function putData(url, method, data) {
//     return new Promise((resolve) => {
//         serve({
//             method,
//             url,
//             query: data
//         })
//         .then((res) => {
//             resolve(res);
//         })
//         .catch(() => {
//             Message({
//                 message: '系统错误',
//                 type: 'error'
//             });
//         });
//     });
// }